
//在这个JS文件中，专门用来创建 Store 的实例对象
import {action, observable} from 'mobx-miniprogram'
 
export const store = observable({
    cart: JSON.parse(wx.getStorageSync('cart') || '[]'),
    token: wx.getStorageSync('token') || '',
    user: JSON.parse(wx.getStorageSync('user') || '{}'),
    redirectInfo:{},
    address:JSON.parse(wx.getStorageSync('address') || '{}'),
    // 计算属性
    get total(){
        let c = 0
      // 循环统计商品的数量，累加到变量 c 中
      this.cart.forEach(goods => c += goods.goods_count)
      return c
    },
    get checkedTotalPrice(){
        return this.cart.filter(x => x.goods_state).reduce((total, item) => total += item.goods_price * item.goods_count,
        0).toFixed(2)
    },
    get checkedTotal(){
        return this.cart.filter(x => x.goods_state).reduce((total, item) => total += item.goods_count, 0)
    },
    // actions 方式，用来修改store中的数据
    addToCart:action(function(goods){
        // 购物车中是否已经存在
      const findResult = this.cart.find(x => x.goods_id === goods.goods_id)
      // 如果不存在就添加进去
      if (!findResult) {
        this.cart.push(goods)
      } else {
        // 如果存在那么数量+1
        findResult.goods_count++
      }
      // 通过 commit 方法，调用 m_cart 命名空间下的 saveToStorage 方法
      this.saveToStorage()
    }),
        // 改变商品状态
        changeGoodsState(goods) {
            const findResult = this.cart.find(x => x.goods_id === goods.goods_id)
      
            if (findResult) {
              // 更新状态
              findResult.goods_state = goods.goods_state
              // 通过 commit 方法，调用 m_cart 命名空间下的 saveToStorage 方法
              this.saveToStorage()
            }
          },
        // 改变商品数量
        changeGoodsCount(goods) {
            const findResult = this.cart.find(x => x.goods_id === goods.goods_id)
      
            if (findResult) {
              // 更新状态
              findResult.goods_count = goods.goods_count
              // 通过 commit 方法，调用 m_cart 命名空间下的 saveToStorage 方法
              this.saveToStorage()
            }
          },
          // 根据 Id 从购物车中删除对应的商品信息
    removeGoodsById(goods_id) {
        // 调用数组的 filter 方法进行过滤
        this.cart = this.cart.filter(x => x.goods_id !== goods_id)
        // 持久化存储到本地
        this.saveToStorage()
      },
      // 更新所有商品的选中状态
    changeAllGoodsState(newState) {
        // 循环改变所有商品的选中状态
        this.cart.forEach(x => x.goods_state = newState)
        this.saveToStorage()
      },
      // 更新token
      updateToken(token){
          this.token = token
        wx.setStorageSync('token', token)
      },
      // 更新user
      updateUser(user){
          this.user = user
        wx.setStorageSync('user',  JSON.stringify(this.user))
      },
      // 更新address
      updateAddress(address){
          
          this.address = address
          if(address.userName){
            this.address.addStr = address.provinceName+address.cityName+address.countyName+address.detailInfo
          }
         
        wx.setStorageSync('address',  JSON.stringify(this.address))
      },
      updateRedirectInfo(redirect){
        this.redirectInfo = redirect
      },
    saveToStorage:action(function(){
        wx.setStorageSync('cart', JSON.stringify(this.cart))
    }),
  
})